package com.mall.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.mall.constants.StatusConstants;
import com.mall.domain.dto.ItemDTO;
import com.mall.domain.dto.ItemPageQueryDTO;
import com.mall.domain.po.Item;
import com.mall.domain.vo.ItemVO;
import com.mall.mapper.CategoryMapper;
import com.mall.mapper.ItemMapper;
import com.mall.result.PageResult;
import com.mall.service.ItemService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @description: 商品服务实现类
 * @author 勾新杰
 * @version 1.0
 * @date 2024/11/23 11:20
 */
@Service
@RequiredArgsConstructor
public class ItemServiceImpl implements ItemService {

    private final ItemMapper itemMapper;

    private final CategoryMapper categoryMapper;

    /**
     * 添加商品
     *
     * @param itemDTO 商品传输对象
     */
    @Override
    public void addItem(ItemDTO itemDTO) {
        // 1. 构建商品对象
        Item item = Item.builder()
                .status(StatusConstants.DISABLE)
                .createTime(LocalDateTime.now())
                .updateTime(LocalDateTime.now())
                .build();
        // 2. 将传输对象中的数据复制到实体对象中
        BeanUtil.copyProperties(itemDTO, item);
        // 3. 插入数据库
        itemMapper.insert(item);
    }

    /**
     * 更新商品状态
     *
     * @param id     商品id
     * @param status 状态
     */
    @Override
    public void updateStatus(Long id, Integer status) {
        // 1. 构建商品对象
        Item item = Item.builder()
                .id(id)
                .status(status)
                .updateTime(LocalDateTime.now())
                .build();
        // 2. 更新数据库
        itemMapper.update(item);
    }

    /**
     * 分页查询商品列表
     *
     * @param itemPageQueryDTO 商品分页查询传输对象
     * @return 分页结果
     */
    @Override
    public PageResult<ItemVO> page(ItemPageQueryDTO itemPageQueryDTO) {
        // // 1. 参数校验page，默认值1
        // if (itemPageQueryDTO.getPage() == null)
        //     itemPageQueryDTO.setPage(1);
        // // 2. 参数校验pageSize，默认值10
        // if (itemPageQueryDTO.getPageSize() == null)
        //     itemPageQueryDTO.setPageSize(10);
        // // 3. 参数校验排序字段，默认值updateTime
        // if (itemPageQueryDTO.getSortFiled() == null || itemPageQueryDTO.getSortFiled().isEmpty())
        //     itemPageQueryDTO.setSortFiled("update_time");
        // // 4. 参数校验排序方式，默认值desc
        // if (itemPageQueryDTO.getSortOrder() == null || itemPageQueryDTO.getSortOrder().isEmpty())
        //     itemPageQueryDTO.setSortOrder("desc");
        // // 5. 参数校验价格范围，默认值0-Double.MAX_VALUE
        // if (itemPageQueryDTO.getMinPrice() == null) itemPageQueryDTO.setMinPrice(0.0);
        // if (itemPageQueryDTO.getMaxPrice() == null) itemPageQueryDTO.setMaxPrice(Double.MAX_VALUE);
        // 6. 设置pageHelper分页参数
        PageHelper.startPage(itemPageQueryDTO.getPageNo(), itemPageQueryDTO.getPageSize());
        // 7. 执行查询
        Page<ItemVO> itemPage = itemMapper.selectPage(itemPageQueryDTO);
        // 8. 返回结果
        return new PageResult<>(itemPage.getTotal(), itemPage.getResult());
    }

    /**
     * 更新商品
     *
     * @param itemDTO 商品传输对象
     */
    @Override
    public void updateItem(ItemDTO itemDTO) {
        // 1. 构建商品对象
        Item item = Item.builder()
                .updateTime(LocalDateTime.now())
                .build();
        // 2. 将传输对象中的数据复制到实体对象中
        BeanUtil.copyProperties(itemDTO, item);
        // 3. 更新数据库
        itemMapper.update(item);
    }

    /**
     * 删除商品
     *
     * @param id 商品id
     */
    @Override
    public void deleteItem(Long id) {
        itemMapper.deleteById(id);
    }

    /**
     * 批量删除商品
     *
     * @param ids 商品id集合
     */
    @Override
    public void deleteItemBatch(List<Long> ids) {
        itemMapper.deleteByIds(ids);
    }

    /**
     * 根据id查询商品
     *
     * @param id 商品id
     * @return 商品视图对象
     */
    @Override
    public ItemVO getItemById(Long id) {
        return itemMapper.detail(id);
    }
}
